home *** CD-ROM | disk | FTP | other *** search
/ SGI Varsity Update 1998 August / SGI Varsity Update 1998 August.iso / dist / dist6.5 / il_dev.idb / usr / include / il / ilBlendImg.h.z / ilBlendImg.h
C/C++ Source or Header  |  1998-07-29  |  4KB  |  119 lines

  1. #if 0 
  2.  
  3.     Copyright (c) 1991 SGI   All Rights Reserved
  4.     THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF SGI
  5.     The copyright notice above does not evidence any
  6.     actual or intended publication of such source code,
  7.     and is an unpublished work by Silicon Graphics, Inc.
  8.     This material contains CONFIDENTIAL INFORMATION that
  9.     is the property of Silicon Graphics, Inc. Any use,
  10.     duplication or disclosure not specifically authorized
  11.     by Silicon Graphics is strictly prohibited.
  12.     
  13.     RESTRICTED RIGHTS LEGEND:
  14.     
  15.     Use, duplication or disclosure by the Government is
  16.     subject to restrictions as set forth in subdivision
  17.     (c)(1)(ii) of the Rights in Technical Data and Computer
  18.     Software clause at DFARS 52.227-7013, and/or in similar
  19.     or successor clauses in the FAR, DOD or NASA FAR
  20.     Supplement.  Unpublished- rights reserved under the
  21.     Copyright Laws of the United States.  Contractor is
  22.     SILICON GRAPHICS, INC., 2011 N. Shoreline Blvd.,
  23.     Mountain View, CA 94039-7311
  24.  
  25. #endif
  26. /*
  27.     ilBlendImg performs source alpha blending of two ilImages.
  28. */
  29.  
  30. #ifndef _ilBlendImg_h_
  31. #define _ilBlendImg_h_
  32.  
  33. #include <il/ilPolyadicImg.h>
  34.  
  35. class ilMpBlendRequest : public ilMpPolyadicRequest {
  36. public:
  37.     ilMpBlendRequest(ilMpManager* parent, int x, int y, int z, int c, 
  38.              int mode = ilLMread) 
  39.     : ilMpPolyadicRequest(parent, x, y, z, c, mode) 
  40.     { alphaBufPtr[0] = alphaBufPtr[1] = NULL; }
  41.  
  42.     void* alphaBufPtr[2];        // array of alpha input buffers
  43. };
  44.  
  45.  
  46. class ilBlendImg : public ilPolyadicImg {
  47. public:
  48.     iflClassListDeclare
  49.     ~ilBlendImg();
  50.     // external api: begin
  51.     ilBlendImg(ilImage* fore = NULL, ilImage* bkgd = NULL, 
  52.            ilCompose comp = ilAplusB);
  53.  
  54.     // external api: name=ilBlendImgAlpha
  55.     ilBlendImg(ilImage* fore, ilImage* bkgd, 
  56.            ilImage* alphaf, ilImage* alphab = NULL, 
  57.            ilCompose comp = ilAplusB);
  58.  
  59.     // external api: name=ilBlendImgConst
  60.     ilBlendImg(ilImage* fore, ilImage* bkgd, float alpha);
  61.  
  62.     ilStatus setConstAlpha(float val);
  63.     float getConstAlpha() { return alpha; }
  64.     int usingConstAlpha();
  65.  
  66.     ilStatus setAlphaPlane(ilImage* alpha);
  67.     ilImage* getAlphaPlane();
  68.     // external api: name=setAlphaPlanes
  69.     ilStatus setAlphaPlane(ilImage* alphaf, ilImage* alphab);
  70.     // external api: name=getAlphaPlanes
  71.     void getAlphaPlane(ilImage*& alphaf, ilImage*& alphab);
  72.  
  73.     // set range for foreground alpha image
  74.     void setAlphaRange(float fmin, float fmax);
  75.     // external api: name=setAlphaRanges
  76.     // set range for foreground & background alpha images
  77.     void setAlphaRange(float fmin, float fmax, float bmin, float bmax);
  78.     void clearAlphaRange();
  79.     void getAlphaRange(float &fmin, float &fmax) { fmin = afmin; fmax = afmax; }
  80.     // external api: name=getAlphaRanges
  81.     void getAlphaRange(float &fmin, float &fmax, float &bmin, float &bmax) 
  82.      { fmin = afmin; fmax = afmax; bmin = abmin; bmax = abmax; }
  83.  
  84.     void setBlendMode(ilCompose mode = ilAplusB);
  85.     ilCompose getBlendMode() { return comp; }
  86.  
  87.     // external api: end
  88.  
  89. protected:
  90.     virtual ilHwOp* hwDefine();
  91.  
  92.     virtual ilMpCacheRequest* getMpRequest(ilMpManager* parent, 
  93.                        int x, int y, int z, int c, 
  94.                        int mode=ilLMread);
  95.     virtual ilStatus prepareRequest(ilMpCacheRequest* req);
  96.     virtual ilStatus executeRequest(ilMpCacheRequest* req);
  97.     virtual ilStatus finishRequest(ilMpCacheRequest* req);
  98.  
  99. private:
  100.     int alphaMode;              // alpha mode: constant alpha,blend or compose
  101.     int separateAlpha;        // false if alpha is part of image data.
  102.     float alpha;                // constant alpha value
  103.     float afmin, afmax;        // range of alpha image values for foreground image
  104.     float abmin, abmax;        // range of alpha image values for background image
  105.     int frangeSet;               // has the range been explicitly set for foreground alpha?
  106.     int brangeSet;               // has the range been explicitly set for background alpha?
  107.     ilCompose comp;
  108.     float mf, mb, biasf, biasb;       // alpha image scaling factors
  109.     
  110.     void init(ilImage* bkgd, ilImage* fore);
  111.     void resetOp();
  112.     void calcMc(float &m, float&c, float min, float max); //compute scaling factors
  113.     ilStatus doConstBlend(ilMpCacheRequest*);
  114.     ilStatus doBlend(ilMpCacheRequest*);
  115.     ilStatus doCompose(ilMpCacheRequest*);
  116. };
  117.  
  118. #endif
  119.